﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DTO;
using System.Data.SqlClient;
using System.Collections;
namespace DAO
{
    public class TaiKhoan_DAO
    {
        BanHang_LinQDataContext db = new BanHang_LinQDataContext();

        //Phương thức lấy danh sách tài khoản
        public List<TaiKhoan> LayDanhSach_TaiKhoan()
        {
            List<TaiKhoan> taikhoan = db.TaiKhoans.ToList();
            return taikhoan;
        }

        //Phương thức Lấy thông tin của tài khoản theo username

        public TaiKhoan LayThongTin_TaiKhoan(string username)
        {
            TaiKhoan tk = db.TaiKhoans.SingleOrDefault(l => l.UserName  == username  && l.isDelete == 0);
            return tk;
        }

        //Phương thức Lấy thông tin của tài khoản theo id
        public TaiKhoan LayThongTin_TaiKhoan(int  id)
        {
            TaiKhoan tk = db.TaiKhoans.SingleOrDefault(l => l.UserID == id && l.isDelete == 0);
            return tk;
        }

        //Phương thức lấy tài khoản theo loại
        public List<TaiKhoan> LayTaiKhoanTheoLoai_TaiKhoan(int maloaitaikhoan)
        {
            List<TaiKhoan> taikhoan = db.TaiKhoans.Where(t => t.MaLoaiThanhVien == maloaitaikhoan).ToList();
            return taikhoan;
        }

        //Phương thức đăng nhập
        public bool DangNhap(string username, String password)
        {
            TaiKhoan tk = db.TaiKhoans.SingleOrDefault(t => t.UserName == username && t.Password == password && t.isDelete == 0);
            if (tk == null)
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        //Phương thức thêm tài khoản
        public bool Them_TaiKhoan(TaiKhoan taikhoan)
        {
            try
            {
                db.TaiKhoans.InsertOnSubmit(taikhoan);
                db.SubmitChanges();
                return true;
            }
            catch
            {
                return false;
            }
        }

        //Phuong thuc xoa tai khoan
        public bool Xoa_TaiKhoan(TaiKhoan taikhoan)
        {
            try
            {
                TaiKhoan tk = db.TaiKhoans.SingleOrDefault(t => t.UserName == taikhoan.UserName);
                tk.isDelete = 1;
                db.SubmitChanges();
                return true;
            }
            catch
            {
                return false;
            }
        }

        //Phuong thuc sua tai khoan
        public bool Sua_TaiKhoan(TaiKhoan taikhoan)
        {
            try
            {
                TaiKhoan tk = db.TaiKhoans.SingleOrDefault(t => t.UserName == taikhoan.UserName);
                tk.Password = taikhoan.Password;
                tk.MaLoaiThanhVien = taikhoan.MaLoaiThanhVien;
                tk.TrangThai = taikhoan.TrangThai;
                tk.Email = taikhoan.Email;
                tk.HoatDongCuoiCung = taikhoan.HoatDongCuoiCung;
                db.SubmitChanges();
                return true;
            }
            catch
            {
                return false;
            }
        }

        ///Thiên
        ///
        //////////////////////////////////////////////////////////////////////////
        // kiểm tra tên đăng nhập khi đăng kí
        public bool KiemTraUserDangKy(string username)
        {
            try
            {
                var user = from u in db.TaiKhoans
                           where u.UserName == username
                           select u;
                foreach (TaiKhoan tk in user)
                {
                    if (tk.UserName == username)
                    {
                        return false;
                    }
                }
                return true;
            }
            catch (SqlException ex)
            {
                throw ex;
            }
        }

        // kiểm tra email có trùng ko
        public bool KiemTraEmailDangKy(string email)
        {
            try
            {
                var em = from e in db.TaiKhoans
                         where e.Email == email
                         select e;
                foreach (TaiKhoan tk in em)
                {
                    if (tk.Email == email)
                    {
                        return false;
                    }
                }
                return true;
            }
            catch (SqlException ex)
            {
                throw ex;
            }
        }

        // kiểm tra cmnd có trùng ko
        public bool KiemTraCMNDDangKy(string cmnd)
        {
            try
            {
                var cm = from e in db.ThongTinTaiKhoans
                         where e.CMND == cmnd
                         select e;
                foreach (ThongTinTaiKhoan tk in cm)
                {
                    if (tk.CMND == cmnd)
                    {
                        return false;
                    }
                }
                return true;
            }
            catch (SqlException ex)
            {
                throw ex;
            }
        }

        // lấy danh sách tài khoản để quản lý tài khoản, chỉ select 1 số cột
        public ArrayList LayDanhSachTK_Admin()
        {
            try
            {
                var q = from h in db.TaiKhoans
                        join l in db.LoaiThanhViens on h.MaLoaiThanhVien equals l.MaLoaiThanhVien
                        where h.isDelete == 0
                        select new
                        {
                            UserID = h.UserID,
                            UserName = h.UserName,
                            Email = h.Email,
                            TrangThai = h.TrangThai,
                            TenLoaiThanhVien = l.TenLoaiThanhVien
                        };
                ArrayList a = new ArrayList();
                foreach (var v in q)
                {
                    TaiKhoanDTO tk = new TaiKhoanDTO();
                    tk.UserID = v.UserID;
                    tk.Username = v.UserName;
                    tk.Email = v.Email;
                    if (v.TrangThai == 1)   // 1 là active
                    {
                        tk.Trangthai = "Actice";
                    }
                    else
                        if (v.TrangThai == 2)
                            tk.Trangthai = "Banned";
                    tk.TenLoaiThanhVien = v.TenLoaiThanhVien;
                    a.Add(tk);
                }
                return a;

                //var q = db.LayDanhSachTK();
                //foreach (LayDanhSachTKResult tk in q)
                //{
                //    TaiKhoan tkDTO = new TaiKhoan();
                //    tkDTO.UserID = tk.UserID;
                //    tkDTO.UserName = tk.Username;
                //    tkDTO.Email = tk.Email;
                //    tk.TrangThai = tk.TrangThai;
                //    tkDTO.HoatDongCuoiCung = tk.HoatDongCuoiCung;
                //    tkDTO.MaLoaiThanhVien = tk.TenLoaiThanhVien;
                //    list.Add(tkDTO);
                //}
                //return list;
            }
            catch (SqlException ex)
            {
                throw ex;
            }
        }

        //Phuong thuc sua tai khoan của admin
        public bool Sua_TaiKhoanAdmin(TaiKhoan taikhoan)
        {
            try
            {
                TaiKhoan tk = db.TaiKhoans.SingleOrDefault(t => t.UserName == taikhoan.UserName);
                tk.MaLoaiThanhVien = taikhoan.MaLoaiThanhVien;
                tk.TrangThai = taikhoan.TrangThai;
                db.SubmitChanges();
                return true;
            }
            catch
            {
                return false;
            }
        }
        //////////////////////////////////////////////////////////////////////////
        //Phuong thuc sua tai khoan pass
        public bool Sua_TaiKhoanDoiPass(TaiKhoan taikhoan)
        {
            try
            {
                TaiKhoan tk = db.TaiKhoans.SingleOrDefault(t => t.UserID == taikhoan.UserID);
                tk.Password = taikhoan.Password;
                db.SubmitChanges();
                return true;
            }
            catch
            {
                return false;
            }
        }

        // lấy danh sách doanh nghiêp
        public List<TaiKhoan> LayDanhSachDoanhNghiep()
        {
            try
            {
                List<TaiKhoan> list = new List<TaiKhoan>();
                list = db.TaiKhoans.Where(u => u.MaLoaiThanhVien == 2).ToList();
                return list;
            }
            catch (SqlException ex)
            {
                return null;
                throw new Exception(ex.Message);
            }
        }

        /// doanh thu theo doanh nghiệp
        public IQueryable DoanhThuTheoDoanhNghiep(TaiKhoan taikhoan)
        {
            try
            {
                var q = from tk in db.TaiKhoans
                        join hd in db.HoaDons
                        on tk.UserID equals hd.UserID
                        where tk.UserID == taikhoan.UserID
                        select new
                        {
                            hd.NgayDatMua,
                            hd.TongTien
                        };
                return q;

            }
            catch (SqlException ex)
            {
                return null;
                throw new Exception(ex.Message);
            }
        }

        //======= Sanh ========
        //Tim Username 
        public List<TaiKhoan> Tim_UserName(string tentaikhoan)
        {
            try
            {
                List<TaiKhoan> taikhoan = db.TaiKhoans.Where(t => t.UserName.Contains(tentaikhoan)).ToList();
                return taikhoan;
            }
            catch
            {
                return null;
            }
        }
    }
}
